function myPromise(fun) {
      if (!(this instanceof myPromise)) {
        throw new TypeError('Function constructor A cannot be invoked without "new"')
      }
      /* 状态0表示初始 1 表示成功 -1表示失败 */
      let myPromiseState = 0
      let data = undefined
      let resloveCallBack = undefined,rejectCallBack = undefined
      this.then = function () {
        if (myPromiseState==0) {
          //成功回调保存
          resloveCallBack=arguments[0]
          //失败回调保存
          rejectCallBack=arguments[1]
          return this
        }else if(myPromiseState=1/* 如果状态成功直接调用 */){
          let result = arguments[0](data)
          if (result instanceof myPromise) {
            //返回 本来的promise对象
            return result
          }else{
            //创建一个新的成功的promise对象
            return myPromise.reslove(result)
          }
        }else if(myPromiseState=-1/* 如果状态失败也是直接调用 */){
          let result = arguments[1](data)
          if (result instanceof myPromise) {
            //返回 本来的promise对象
            return result
          }else{
            //创建一个新的成功的promise对象
            return myPromise.reslove(result)
          }
        }
      }
      /* 成功 */
      let reslove =p=>{
        data = p
        myPromiseState = 1
        if (resloveCallBack!=undefined) {
          resloveCallBack(p)
        }
      }
      /* 失败 */
      let reject =p=>{
        data = p
        myPromiseState = -1
        if (rejectCallBack!=undefined) {
          rejectCallBack(p)
        }
      }
      /* 调用回调 */
      fun(reslove, reject)
    }

/* 成功调用 */
    myPromise.reslove = function () {
      let data = arguments[0]
      return new myPromise(function () {
        arguments[0](data)
      })
    }

/* 失败调用 */
    myPromise.reject = function () {
      let data = arguments[0]
      return new myPromise(function () {
        arguments[1](data)
      })

    }
    myPromise.prototype.then = function () {/* 挂名 */ }
    myPromise.prototype.catch = function () {/* 挂名 */ }
    myPromise.prototype.finally = function () { /* 挂名 */}